[][src]Crate nobs_vkpipes_macro

nobs-vkpipes-macro

Proc-Macro crate for nobs-vkpipes

This crate defines the actual proc macros for the pipeline and shader stage code generation

Example

This is a simple example that sets up a compute pipeline.

All the magic happens in vk::pipes::pipeline! macro! We define the pipeline with several comma separated fields, paths are always specified relative to the compilied crate's cargo.toml:

See pipeline and shader for complete list of supported options.

This example deliberately fails to compile
extern crate nobs_vulkanism as vk;

// declare the module that will contain our pipeline
mod make_sequence {
  vk::pipes::pipeline!{
    dset_name[0] = "Dset",
    stage = {
      ty = "comp",
      glsl = "
#version 450
#extension GL_ARB_separate_shader_objects : enable

const uint GROUP_SIZE = 512;

layout(binding = 0) uniform ub {
  uint num_elems;
  uint i_first;
  uint i_step;
};

layout(binding = 1) buffer b_out {
  uint bout[];
};

layout(local_size_x = GROUP_SIZE) in;
void main() {
  // copy input values for group in shared memory
  uint gid = gl_GlobalInvocationID.x;

  if (gid < num_elems) {
    bout[gid] = i_first + gid * i_step;
  }
}
        ",
    }
  }

  // The code generation will not create types for e.g. the uniform buffer
  // If we want this, we need to do it our selves
  pub struct ub {
    pub num_elems: u32,
    pub i_first: u32,
    pub i_step: u32,
  }
}

Macros

pipeline

Generates code for a pipeline

shader

Generates code for a shader stage